#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
主题: 获取文件夹中的文件列表
问题: 你想获取文件系统中某个目录下的所有文件列表。
提示 :
"""

import os
import glob
from fnmatch import fnmatch


path = '../'
print(f"{path = }")

def recipe1():
    # 所有文件列表，包括所有文件，子目录，符号链接等等
    print(f"{os.listdir(path) = }")

    # 所有文件
    print(f"{[name for name in os.listdir(path) if os.path.isfile(os.path.join(path, name))] = }")

    # 所有目录
    print(f"{[name for name in os.listdir(path) if os.path.isdir(os.path.join(path, name))] = }")

    # 所有py文件
    print(f"{[name for name in os.listdir(path) if name.endswith('.py')] = }")

    # 其他方法文件名的匹配
    print(f"{glob.glob(path + '/*.py') = }")
    print(f"{[name for name in os.listdir(path) if fnmatch(name, '*.py')] = }")

def recipe2():
    '''获取其他的元信息，比如文件大小，修改时间等等'''
    pyfiles = glob.glob('*.py')

    # 获取文件大小和修改日期
    name_sz_date = [(name, os.path.getsize(name), os.path.getmtime(name)) for name in pyfiles]
    for name, size, mtime in name_sz_date:
        print(f"{name, size, mtime = }")

    # 备选方案：获取文件元数据
    file_metadata = [(name, os.stat(name)) for name in pyfiles]
    for name, meta in file_metadata:
        print(f"{name, meta.st_size, meta.st_mtime = }")

def main():
    print('recipe1'.center(20, '*'))
    recipe1()
    print('recipe2'.center(20, '*'))
    recipe2()

if __name__ == '__main__':
    main()        